package com.gitee.cashzhang27.test.cloud.oauth.auth.server.extended.handler;

import org.springframework.context.ApplicationListener;
import org.springframework.lang.NonNull;
import org.springframework.security.authentication.event.AbstractAuthenticationFailureEvent;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;

/**
 * 认证失败事件处理器
 *
 * @author Cash Zhang
 * @version v1.0
 * @since 2019/01/31 21:30
 */
public abstract class AbstractAuthenticationFailureEvenHandler implements
    ApplicationListener<AbstractAuthenticationFailureEvent> {

  /**
   * Handle an application event.
   *
   * @param event the event to respond to
   */
  @Override
  public void onApplicationEvent(@NonNull AbstractAuthenticationFailureEvent event) {
    AuthenticationException authenticationException = event.getException();
    Authentication authentication = (Authentication) event.getSource();

    handle(authenticationException, authentication);
  }

  /**
   * 处理登录成功方法
   * <p>
   *
   * @param authenticationException 登录的authentication 对象
   * @param authentication 登录的authenticationException 对象
   */
  public abstract void handle(
      AuthenticationException authenticationException, Authentication authentication);
}
